/***********************************************************************************
 * 文件名： sct92f25_lydrv_config.h
 * 作者： 刘言
 * 版本： 1
 * 说明：
 * 		CST92F25 的 自定义驱动（LyDrv）静态配置。以下配置调用对应外设的初始化函数时生效。
 * 修改记录：
 * 	2022/10/10: 初版。 刘言。
***********************************************************************************/
#ifndef _LYDRV_CONFIG_H_
#define _LYDRV_CONFIG_H_

// 定义用于调试，若不定义将启用看门狗，如果FLASH时钟设置超过48M可能启动失败，看门狗可以复位。
#define _MCU_DEBUG

/**
 * LOG等级选择
 * 0：关闭LOG
 * 1：User info output, 使能 LOG() 的输出信息。
 * 2: System info output, 使能 AT_LOG() and LOG_DEBUG() 的输出信息。
 * 3: All info output， 使能 LOG(), AT_LOG() 和 LOG_DEBUG() 的输出信息。
*/
#define _LOG_LEVEL  0

//////////////// MCU时钟相关配置

/**
 * 内置的 SPI_FLASH 时钟选择。直接影响性能，CPU频率（HCLK）影响不大（96M仅提高2%）。注意：高
 * 于48M目前存在启动失败的问题，注释掉_MCU_DEBUG启动看门狗可复位重试。
 * 0 - rc 32m 
 * 1 - dll 32m  
 * 2 - xtal 16m   
 * 3 - dll 48m  
 * 4 - dll 64m   
 * 5 - dll 96m
*/
#define _MCU_SPIF_CLK_SEL   5

//////////////// BLE

#define _DEV_NAME   "SDK_TEST"

//////////////// GPIO

// 以下配置的各位分别对应PAx，但是规格书管脚名称编号未按照寄存器顺序来，详见 gpio_pin_t 。

// 默认输出电平
//  22 ~  16 15 ~    8 7 ~     0
// x000 0000 0000 0000 0000 0000
#define _GPIO_ODR       0x000000

// 方向，0:输入；1:输出。
//  22 ~  16 15 ~    8 7 ~     0
// x000 0000 0000 0000 1000 0000
#define _GPIO_DIR       0x000080

// 使能中断，0:不使能；1:使能。
//  22 ~  16 15 ~    8 7 ~     0
// x100 0000 0000 0000 0000 0000
#define _GPIO_IER       0x400000

// 中断模式，0:电平触发，1：边沿触发。
//  22 ~  16 15 ~    8 7 ~     0
// x111 1111 1111 1111 1111 1111
#define _GPIO_INT_MODE  0xFFFFFF

// 中断极性，0：低电平或下降沿，1：高电平或上升沿。
//  22 ~  16 15 ~    8 7 ~     0
// x000 0000 0000 0000 0000 0000
#define _GPIO_INT_POLT  0x000000

// 以下配置对应规格书的管脚名称

#define _GPIO_P00_PA0_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P01_PA1_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P02_PA2_PUL   2   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ) SWD
#define _GPIO_P03_PA3_PUL   2   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ) SWD
#define _GPIO_P07_PA4_PUL   0   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P09_PA5_PUL   2   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ) UART TX
#define _GPIO_P10_PA6_PUL   2   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ) UART RX
#define _GPIO_P11_PA7_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P14_PA8_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P15_PA9_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P16_PA10_PUL   0   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ) 32k xtal
#define _GPIO_P17_PA11_PUL   0   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ) 32k xtal
#define _GPIO_P18_PA12_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P20_PA13_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P23_PA14_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P24_PA15_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P25_PA16_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P26_PA17_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P27_PA18_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P31_PA19_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P32_PA20_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P33_PA21_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)
#define _GPIO_P34_PA22_PUL   1   // 0:float;1:强上拉(150KΩ)；2：弱上拉(1MΩ)；3：下拉(100KΩ)


//////////////// SPI

#define _SPI_CPHA           0
#define _SPI_CPOL           0
#define _SPI_CLK_DIV        2        // 时钟分频,>=2，64M下分频
#define _SPI_USE_ASNYC      0        // 1: 启用异步操作(高速SPI时钟时没有帮助)，0：仅使用同步API（死等传输结束）
#define _SPI_EN_DMA_TX      0        // 1: 启用DMA进行发送传输，需要自行调用 HalDMAInit 。（实测偶尔会发送错误）
#define _SPI_EN_DMA_RX      0        // 1: 启用DMA进行接收传输【暂不支持】


////////////////// ADC

// 管脚模式选择。注意：实际分压比例每个通道会有偏差，分压电阻理论值为4.72K、14.15K（±15%），注意输入阻抗。 
// 电阻分压模式下如果需要精确的值请调用 Adc_GetVoltage 函数直接获取通道电压值（内部校准）。
#define _ADC_ATT_AIO0       0       // 1：AIO0(P11)衰减相连使能，1/4电阻分压；0:直连，高输入电阻。
#define _ADC_ATT_AIO1       0       // 1：AIO1(P23)衰减相连使能，1/4电阻分压；0:直连，高输入电阻。
#define _ADC_ATT_AIO2       0       // 1：AIO2(P24)衰减相连使能，1/4电阻分压；0:直连，高输入电阻。
#define _ADC_ATT_AIO3       0       // 1：AIO3(P14)衰减相连使能，1/4电阻分压；0:直连，高输入电阻。
#define _ADC_ATT_AIO4       0       // 1：AIO4(P15)衰减相连使能，1/4电阻分压；0:直连，高输入电阻。
#define _ADC_ATT_AIO7       0       // 1：AIO7(P18)衰减相连使能，1/4电阻分压；0:直连，高输入电阻。
#define _ADC_ATT_AIO8       0       // 1：AIO8(P25)衰减相连使能，1/4电阻分压；0:直连，高输入电阻。
#define _ADC_ATT_AIO9       0       // 1：AIO9(P20)衰减相连使能，1/4电阻分压；0:直连，高输入电阻。

// 以下是各通道的初始参数
// 注意：采样时间目前很诡异，每个通道设置一样但是效果可能不一样，设置这个通道也可能影响其它通道。

#define _ADC_AM_CH0_SAMPLE_TIME     0   // 采样时间，0~15:2~62T(step 4T, T is period of 1.28MHz)
#define _ADC_AM_CH0_EN              0   // 使能
#define _ADC_AM_CH0_DIFF            1   // 1：差分，0：单端。（CH0可能只能差分）

#define _ADC_AM_CH1_SAMPLE_TIME     0   // 采样时间，0~15:2~62T(step 4T, T is period of 1.28MHz)
#define _ADC_AM_CH1_EN              0   // 使能
#define _ADC_AM_CH1_DIFF            1   // 1：差分，0：单端。（CH1可能只能差分）

#define _ADC_AM_CH2_SAMPLE_TIME     1   // 采样时间，0~15:2~62T(step 4T, T is period of 1.28MHz)
#define _ADC_AM_CH2_EN              0   // 使能
#define _ADC_AM_CH2_DIFF            0   // 1：差分，0：单端。

#define _ADC_AM_CH3_SAMPLE_TIME     1   // 采样时间，0~15:2~62T(step 4T, T is period of 1.28MHz)
#define _ADC_AM_CH3_EN              0   // 使能
#define _ADC_AM_CH3_DIFF            0   // 1：差分，0：单端。（CH3可能只能单端）

#define _ADC_AM_CH4_SAMPLE_TIME     1   // 采样时间，0~15:2~62T(step 4T, T is period of 1.28MHz)
#define _ADC_AM_CH4_EN              0   // 使能
#define _ADC_AM_CH4_DIFF            0   // 1：差分，0：单端。

#define _ADC_AM_CH5_SAMPLE_TIME     1   // 采样时间，0~15:2~62T(step 4T, T is period of 1.28MHz)
#define _ADC_AM_CH5_EN              0   // 使能
#define _ADC_AM_CH5_DIFF            0   // 1：差分，0：单端。（CH5可能只能单端）

#define _ADC_AM_CH6_SAMPLE_TIME     1   // 采样时间，0~15:2~62T(step 4T, T is period of 1.28MHz)
#define _ADC_AM_CH6_EN              0   // 使能
#define _ADC_AM_CH6_DIFF            0   // 1：差分，0：单端。

#define _ADC_AM_CH7_SAMPLE_TIME     1   // 采样时间，0~15:2~62T(step 4T, T is period of 1.28MHz)
#define _ADC_AM_CH7_EN              0   // 使能
#define _ADC_AM_CH7_DIFF            0   // 1：差分，0：单端。（CH7可能只能单端）

// 1: 同步获取结果的API直接返回最后一次转换结果。（ADC一直在更新结果）。
// 0: 等待一次完整的转换过程后返回结果。
#define _ADC_DIRECT_RESULT  0       

// 异步转换时滤波采样数量。也是连续转换的转换次数(次数达到后中断).
// 设置为64，出结果的时间大概250us/通道。只要通道使能就会占用转换时间。
#define _ADC_SAMPING_NUM        64   // 2~64, 

#define _ADC_FILTER_ALG         0   // 自动扫描模式时的滤波算法。0：平均(更快)；1：中值（通道过多可能中断出不来）

#endif
